No.2.3 纸牌 |
您所在的位置:网站首页 › 纸牌 小猫钓鱼 › No.2.3 纸牌 |
1.规则:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。【假设牌面只有1~9】 2.分析: 每个人都有两种操作:出牌和赢牌 队列的出栈与入栈 struct queue {int data[100]; int head; int tail;}; 桌面规则:有相同的牌,则两张牌及其之间的牌面全部出栈,并给赢牌的一方入栈,此处用栈 struct stack {int data[10]; int top;} 3.解题思路: struct queue{ int data[100]; int head; int tail;}; struct stack{ int data[100]; int top;}; struct stack s; struct queue push_card(){ //发牌 struct queue q; int n,i; printf("开始发牌:"); scanf("请输入牌数%d",&n); for (i=1;itail++; } return *q;} //出牌void play_card(queue *q){ int t; int top, i, book[10]; for (i=1;ihead++; book[t]=1; } else { q->head++; q->data[q->tail]=t; q->tail++; while(s.data[s.top]!=t){ book[s.data[s.top]]=0; q->data[q->tail]=s.data[s.top]; q->tail++; s.top--; } }} //谁输谁赢?int who_win(queue *q){ int i; if (q->head == q->tail){ flag = 1; for (i=q->head;itail-1;i++) printf("%d ",q->data[i]); if (s.top>0){ printf("%d ",s.data[s.top]); s.top--; } else printf("table is clear"); } return flag;} int main(){ struct queue q1, q2; int i,n,t; int top; //初始化指针 q1.head=1;q1.tail=1; q2.head=1;q2.tail=1; s.top=0; flag=0; //发牌 q1 = push_card(&q1); q2 = push_card(&q2); //出牌 while(q1.head |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |